package gu.sql2java.excel.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.math.BigDecimal;

/**
 * 定义导出Excel 表数据的全局配置注解
 * 
 * @author guyadong
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
@Repeatable(ExcelSheets.class)
public @interface ExcelSheet
{

	/** excel Sheet名字 */
    public String sheetName() default "exportedExcel";
    
    /**
	 * 导出的文件名前缀
	 */
	public String fileNamePrefix() default "";
	/** excel Sheet 标题 */
    public String title() default "";
	/**
	 * 标题字体名
	 */
    public String titleFontName() default "Calibri";
	/**
	 * 标题字体高度
	 */
    public short titleFontHeight() default 32;
	/**
	 * 标题字体颜色,参见 {@link org.apache.poi.ss.usermodel.IndexedColors}
	 */
    public String titleFontColor() default "BLACK";
    /**
     * 标题单元背景填充颜色,参见 {@link org.apache.poi.ss.usermodel.IndexedColors}
     */
    public String titleFillColor() default "WHITE";
    /**
     * 标题对齐水平方式
     */
    public String titleHorizontalAlign() default "CENTER";

    /**
     * 首行(字段名)字体名
     */
    public String headerFontName() default "Calibri";
    /**
     * 首行(字段名)字体高度
     */
    public short headerFontHeight() default 16;
	/**
	 * 首行(字段名)字体颜色,参见 {@link org.apache.poi.ss.usermodel.IndexedColors}
	 */
    public String headerFontColor() default "BLACK";
    /**
     * 首行(字段名)单元背景填充颜色,参见 {@link org.apache.poi.ss.usermodel.IndexedColors}
     */
    public String headerFillColor() default "GREY_25_PERCENT";
    /**
     * 首行(字段名)水平对齐方式
     */
    public String headerHorizontalAlign() default "CENTER";

    /**
     * 字体设置:标题行字体加粗
     */
    public boolean firstBold() default true;
	/**
	 * 默认字体高度
	 */
    public short fontHeight() default 16;
	/**
	 * 默认字体名
	 */
    public String fontName() default "Calibri";
	/**
	 * 默认字体颜色,参见 {@link org.apache.poi.ss.usermodel.IndexedColors}
	 */
    public String fontColor() default "BLACK";
    /**
     * 默认单元背景填充颜色,参见 {@link org.apache.poi.ss.usermodel.IndexedColors}
     */
    public String fillColor() default "WHITE";
    /**
	 * 默认导出字段水平对齐方式
	 */
	public String horizontalAlign() default "CENTER";
	/**
     * 默认整数(Integer,Long,Short)格式
     */
    public String integralFormat() default "0";
    /**
     * ({@link java.util.Date})日期时间格式, 如: yyyy-MM-dd HH:mm:ss
     */
    public String dateTimeFormat() default "yyyy-MM-dd HH:mm:ss";
    /**
     * ({@link java.sql.Date})日期格式, 如: yyyy-MM-dd
     */
    public String dateFormat() default "yyyy-MM-dd";
    /**
     * ({@link java.sql.Time})时间格式, 如: HH:mm:ss
     */
    public String timeFormat() default "HH:mm:ss";
    /**
     * ({@link java.sql.Timestamp})时间戳格式, 如: yyyy-MM-dd HH:mm:ss
     */
    public String timestampFormat() default "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
    /**
     * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化)
     */
    public int scale() default -1;

    /**
     * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN
     */
    public int roundingMode() default BigDecimal.ROUND_HALF_EVEN;

    /**
     * 导出时在excel中每个列的最大高度, 单位为字符
     */
    public int maxHeight() default 0;

    /**
     * 导出时在excel中每个列的最大宽度, 单位为字符
     */
    public int maxWidth() default 32;

    /**
     * 当值为空时,字段的默认值
     */
    public String defaultValue() default "";

    /**
	 * 字段输出白名单,在此名单中的字段会被输出,同时指定白名单和黑名单时以白名单为准
	 */
    public String[] includeColumns() default {};
	/**
	 * 字段输出黑名单,在此名单中的字段不会被输出,同时指定白名单和黑名单时以白名单为准
	 */
    public String[] excludeColumns()  default {};
    /**
     * 隐藏字段名单,指定任何情况下都不输出的字段列表
     * 在此名单中的字段,不论{@link #includeColumns()}{@link #excludeColumns()}如何设置都不会被输出
     */
    public String[] hideColumns()  default {};
    /**
	 * 默认的字段输出白名单,此字段用于给前端提供默认的输出字段及顺序
	 */
    public String[] defaultIncludeColumns() default {};
    /**
     * 动态输出Excel中的字段名列表,此字段用于服务方法中保存的动态输出EXCEL字段名
	 * @since 3.26.0
     */
    public String[] dynamicExcelNames() default {};
    /**
     * Spring Controller 服务方法中获取excel导出参数的开关参数名,
     * 不需要注入SheetConfig
     */
    public String getParameterArgName() default "getParameter";
    /**
     * Spring Controller 服务方法中定义导出文件名的参数名,
     * 不需要注入SheetConfig
     */
    public String exportFileNameArgName() default "exportFileName";
    /**
     * Spring Controller 服务方法中定义导出记录列表的原始记录对象类型
     */
    public Class<?> beanClass() default Object.class;
}